#ifndef UTILS_HPP
#define	UTILS_HPP

#include <iostream>
#include <cstdlib>

using std::string;
using std::cout;
using std::cin;
using std::endl;

namespace lms {
    namespace utilities {

        class Utilities {
        public:
           static string getInput(string message);
           static void printText(string message);
           static void pause();
           static void exit();
           static void clearScreen();
           static int getInt(string message);
           template< class TType >
           static TType reinterpret_input( string message ) {
              TType num = TType();
              cout << message <<"  ";
              cin >> num;
              return num;               
           }
           
        };
        
        

        template< typename TEntity >
        class Singleton {
        private:
            Singleton(const Singleton&);
            const Singleton& operator=(const TEntity&);
        protected:

            Singleton() {
            };
        public:

            static TEntity& getInstance() {
                static TEntity* instance = new TEntity();
                return *instance;
            }

        };
    }
}
#endif	/* UTILS_HPP */

